package cn.tedu.demo;

import org.junit.jupiter.api.Test;
//重写快捷键 ctrl+o
/*本类用于多态的入门案例
 * 口诀对象；父类引用，指向子类对象
 * 编译看左边运行看右边
 * 多态使用的是父类的声明，子类的具体实现
 * 子类不可以调用子类的特有的功能
 * 多态的出现为了统一调用标准，向父类看齐
 * 父类声明的功能才可以用，子类特有的功能用不了
 * 如果想用子类的功能就调用子类的对象*/
public class TestDemo {
    @Test
    public void test() {
        Animal animal = new Animal();
        Cat cat = new Cat();
        /*声明父类new子类对象*/
        Animal animal1 = new Cat();
        animal1.eat();
        System.out.println(animal1.name);
    /*声明子类new父类对象需要进行类型强转
    * java.lang.ClassCastException: cn.tedu.demo.Animal cannot be cast to cn.tedu.demo.Cat
     类型强制转换异常*/
 /*  Cat cat1= (Cat) new Animal();
   Cat cat2=cat1;
   cat2.sleep1();
    cat1.sleep1();
    System.out.println(cat1.name);*/


        /*向下转型*/
        Cat cat1 = (Cat) animal1;
        cat1.sleep1();
    }
}

class Animal {
    String name = "Animal";

    public void eat() {
        System.out.println("填鸭");
    }
}

class Dog extends Animal {
    @Override
    public void eat() {
        System.out.println("Dog");
    }
}

class Cat extends Animal {
    String name = "cat";

    @Override
    public void eat() {
        System.out.println("Cat");
    }

    public void sleep1() {
        System.out.println("老子要睡觉");
    }
}